#pragma once

#include "BaseUserEvent.h"
#include "operationState.h"
#include <osgViewer/View>
#include <Windows.h>

class IEventCall;
/**
 * @brief 测量面积事件
 */
class COsgMeasureAreaEvent : public CBaseUserEvent
{
public:
    COsgMeasureAreaEvent(osgViewer::View *view, osg::Group *root, IEventCall *iCall);

    /**
     * @brief updateActivatedStatus 通知事件状态激活, 可以激活多个事件
     * @param vecOpState  激活消息，可多个
     */
    virtual void updateActivatedStatus(const std::vector<OperatingState> vecOpState);

protected:
    /**
     * @brief handle 事件处理函数，可处理客户端发送的gui消息
     * @param ea  gui消息，包含鼠标、键盘等消息
     * @param aa 没用过
     */
	virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa);

protected:
    /**
     * @brief vecWorldCoord 存储鼠标点击的点的坐标信息，是世界坐标系
     */
	std::vector<osg::Vec3d> vecWorldCoord;

    /**
     * @brief mView 浏览器
     */
    osgViewer::View* mView;

    /**
     * @brief mRoot 场景根节点
     */
    osg::Group* mRoot;

    /**
     * @brief mEditSceneGroup 保存测量时候绘制图形的组
     */
	osg::Group* mEditSceneGroup;

    /**
     * @brief iCall 回调类
     */
    IEventCall *miCall;

    /**
     * @brief isActivated 判断事件是否激活
     */
	bool isActivated;
};
